簡單的本地儲存方式
用來儲存一些簡單的資料,會以 xml 檔的形式存在 App 的私有目錄下。
儲存內容為 Key - Value 的對應資料
若希望 App 被關掉並重新啟動後可以讀取到原本資料
就可以將資料存進 SharedPreferences
並再重啟後從 SharedPreferences 讀取資料
取得 SharedPreferences 實例
透過 Context 的 getSharedPreferences 方法取得實例
getSharedPreferences (name: String, mode: Int) : SharedPreferences
name:SharedPreferences 檔案的名稱
若該名稱的檔案尚未存在,會在編輯檔案內容並 commit 時創建。
若該名稱的檔案已存在,則編輯會應用在已存在的該名稱檔案上。
mode:SharedPreferences 的使用權限模式,可為 0 或下列選項:
0:使用默認的模式,默認模式為 MODE_PRIVATE。
Context.MODE_PRIVATE:只有當前這個 App 可以對該 SharedPreferences 檔案做讀寫。
Context.MODE_MULTI_PROCESS:多進程可共用此檔案,但因多進程的讀寫容易造成錯誤或衝突,故建議改用 ContentProvider 而不建議使用此模式,且此模式已在 API 23 以上的版本被棄用。
原本還有另外兩個模式:
Context.MODE_WORLD_READABLE、Context.MODE_WORLD_WRITEABLE
但因這兩個模式為所有 App 皆可讀或寫,較為危險,故已被棄用。
回傳一個 SharedPreferences 的實例
val pref = context.getSharedPreferences("Name", Context.MODE_PRIVATE)
Editor 可以用來編輯 SharedPreferences 檔案的內容,
且在執行 Editor 的 commit 或 apply 方法後,
Editor 編輯的內容才會被應用至 SharedPreferences 檔案。
edit () : SharedPreferences.Editor
val editor = pref.edit()
以下為 SharedPreferences.Editor 中的方法
putString (key: String, values: String)
putStringSet (key: String, values: Set<String>)
putBoolean (key: String, value: Boolean)
putInt (key: String, value: Int)
putFloat (key: String, value: Float)
putLong (key: String, value: Long)
在 SharedPreferences 檔案中加入資料
key:資料的標籤,取值時需透過指定標籤取得對應資料。
value:想要儲存的資料內容。
editor.putString("name", "Aria")
移除指定資料
editor.remove("name")
清空 SharedPreferences 檔案中的所有資料
editor.clear()
將變更應用到 SharedPreferences 檔案中
有兩種方法:
先將變更儲存至內存,之後再異步應用到 SharedPreferences 檔案。
速度較快,因此一般使用通常會建議用此方法。
不會回傳應用結果為成功或失敗(失敗的機率非常低),
因此若要儲存的為非常重要的資料,則不建議此方法。
editor.putString("name", "Aria").apply()
將變更同步應用至 SharedPreferences 檔案。
速度較慢,因為存取實體檔案會較耗時。
會回傳應用結果為成功或失敗,因此若儲存的為重要資料可以使用此方法。
editor.putString("name", "Aria").commit()
關於 apply () 及 commit () 的差異可以參考 [參考資料]
取出 SharedPreferences 檔案的資料
getString (key: String, defValue: String)
getStringSet (key: String, defValue: Set<String>)
getBoolean (key: String, defValue: Boolean)
getInt (key: String, defValue: Int)
getFloat (key: String, defValue: Float)
getLong (key: String, defValue: Long)
依 Key 取出相對應的資料
key:想取出的資料的資料標籤。
defValue:如果沒找到資料時要返回的預設值。
val name : String = pref.getString("name", "")
取得 SharedPreferences 檔案中的所有資料
回傳為 Map 格式的資料
val data : MutableMap<String, *> = pref.getAll()
關於 SharedPreferences 可以參考 參考資料
Android
Kotlin
SharedPreferences